package com.itfreer.gis.data.server.arcgis;

import java.util.List;

import org.locationtech.jts.geom.Geometry;
import org.opengis.feature.simple.SimpleFeature;

import com.itfreer.gis.data.server.SearchPara;

/**
 * arcgis wfs查询
 */
public class ArcgisWFSSearch {
	
	/**
	 * 空间查询，与当关要素空间叠加关系查询
	 * 
	 * @param type
	 *            地图类型
	 * @param url
	 *            地址
	 * @param geometry
	 *            空间要素
	 * @param paras
	 *            参数
	 * @return
	 */
	public List<SimpleFeature> queryFeature(String url, Geometry geometry, SearchPara paras) throws Exception {
		return null;
	}

	/**
	 * 空间查询，查询当前地图范围内地要素
	 * 
	 * @param type
	 *            地图类型
	 * @param url
	 *            地址
	 * @param extent
	 *            当前地图范围
	 * @param paras
	 *            参数
	 * @return
	 */
	public List<SimpleFeature> queryFeature(String url, String extent, SearchPara paras) throws Exception {
		return null;
	}

	/**
	 * 属性查询，根据属性条件进行查询
	 * 
	 * @param type
	 *            地图类型
	 * @param url
	 *            地址
	 * @param where
	 *            属性条件
	 * @param extent
	 *            当前地图范围
	 * @param paras
	 *            参数
	 * @return
	 */
	public List<SimpleFeature> queryFeature(String url, String where, String extent, SearchPara paras)
			throws Exception {
		return null;
	}

//	private ArcgisDataTypeConvert dataTypeConvert = new ArcgisDataTypeConvert();
//	
//	/**
//	 * arcgis要素查询服务
//	 * 
//	 * @param baseUrl
//	 *            http://192.168.1.120:6080/arcgis/rest/services/TEST/FeatureServer
//	 * @param layerId
//	 *            0
//	 * @param where
//	 *            sheng=44
//	 * @param objectIds
//	 *            8808,8805
//	 * @return
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	public List<Feature> queryFeature(DataDefinitionEntity source, String where) {
//		try {
//			// 创建HTTP客户端
//			CloseableHttpClient httpclient = HttpClientBuilder.create()
//					.setDefaultRequestConfig(ArcGisConstants.REQUEST_CONFIG).build();
//			// 创建POST请求
//			String realUrl = source.getDataserver() + "/" + ArcGisConstants.QUERY_FEATURES;
//			HttpPost httpPost = new HttpPost(realUrl);
//			// 创建POST请求参数, 必须用NameValuePair
//			List<NameValuePair> params = new ArrayList<>();
//			// 设置传值参数类型为json
//			params.add(new BasicNameValuePair("f", "json"));
//			// 将拼装好的条件添加到参数中
//			if (where != null && !where.equals("")) {
//				params.add(new BasicNameValuePair("where", where));
//			}
//			// 返回所有字段
//			params.add(new BasicNameValuePair("outFields", "*"));
//			// if (objectIds != null && !"".equals(objectIds)) {
//			// 		params.add(new BasicNameValuePair("objectIds", objectIds));
//			// }
//			// 设置http Post请求参数
//			HttpEntity entity = new UrlEncodedFormEntity(params, ArcGisConstants.DEFAULT_CHARSET);
//			httpPost.setEntity(entity);
//			// 发送请求
//			HttpResponse response = httpclient.execute(httpPost);
//			if (response.getStatusLine().getStatusCode() == 200) {
//				// 调用EntityUtils.toString方法最后会自动把inputStream close掉的
//				String result = EntityUtils.toString(response.getEntity());
//				// 将旧的对象从result解析出来,得到objectid
//				Map<String, Object> data = new HashMap<>();
//				data = JsonUtils.toBean(result, data.getClass());
//				
//				// 得到objectIdFieldName
//				String objectIdFieldName = data.get(ArcGisConstants.objectIdFieldName).toString();
//				
//				// 得到 spatialReference
//				Map<String, Object> spatialReference = (Map<String, Object>) data.get(ArcGisConstants.spatialReference);
//				Integer wkid = (Integer)spatialReference.get("wkid");
//				
//				// 得到 geometryType
//				String geometryType = data.get(ArcGisConstants.geometryType).toString();
//				
//				// 得到fields
//				List<Map<String, Object>> fields = (List<Map<String, Object>>) data.get(ArcGisConstants.fields);
//				List<FieldInfo> fieldInfos = new ArrayList<FieldInfo>();
//				for(Map<String, Object> item : fields) {
//					FieldInfo info = new FieldInfo();
//					info.setName(item.get("name").toString());
//					info.setAlias(item.get("alias").toString());
//					info.setType(dataTypeConvert.Convert(item.get("type").toString()));
//					fieldInfos.add(info);
//				}
//				
//				// 得到features集合
//				List<Feature> gisResults = new ArrayList<>();
//				List<Map<String, Object>> features = (List<Map<String, Object>>) data.get(ArcGisConstants.FEATURES);
//				for(Map<String, Object> item : features) {
//					Feature g = new WktFeature();
//					g.setCoordinate(wkid);
//					g.setFields(fieldInfos);
//					g.setKeyField(objectIdFieldName);
//					if(geometryType.equals("esriGeometryPolygon")) {
//						g.setFeatureType(FeatureType.POLYG);
//					} else if(geometryType.equals("esriGeometryPolyline")) {
//						g.setFeatureType(FeatureType.LINE);
//					} else if(geometryType.equals("esriGeometryPoint")) {
//						g.setFeatureType(FeatureType.POINT);
//					}
//					
//					g.setAttribute((Map<String, Object>)item.get("attributes"));
//					g.setGeometry(item.get("geometry").toString());
//					gisResults.add(g);
//				}
//				return gisResults;
//			}
//			// 释放资源
//			httpclient.close();
//			return null;
//		} catch (Exception e) {
//			return null;
//		}
//	}

}
